/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.entity;

import br.jm.financeiro.filter.ConfiguraCampoAnnotation;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Size;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.annotations.Type;

/**
 *
 * @author joao
 */
@Entity
@Table(name = "conta_receber", catalog = "salao", schema = "public")
//@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class ContaReceber implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "conta_receber_id_receber_seq")
    @SequenceGenerator(name = "conta_receber_id_receber_seq", sequenceName = "conta_receber_id_receber_seq", initialValue = 1, allocationSize = 1)
    @Column(name = "id_receber", nullable = false)
    private Integer idReceber;
    @Basic(optional = false)
    @Column(name = "dsc_receber", nullable = false, length = 40)
    private String dscReceber;
    @Column(name = "num_documento", length = 30)
    private String numDocumento;
    @Basic(optional = false)
    @Column(name = "vlr_receber", nullable = false, precision = 18, scale = 2)
    private BigDecimal vlrReceber;
    @Type(type = "org.hibernate.type.TextType")
    @Column(name = "dsc_obs")
    private String dscObs;
    @Column(name = "per_juros", precision = 18, scale = 2)
    private BigDecimal perJuros;
    @Column(name = "vlr_desconto", precision = 18, scale = 2)
    private BigDecimal vlrDesconto;
    @Column(name = "vlr_multa", precision = 18, scale = 2)
    private BigDecimal vlrMulta;
    @Column(name = "tip_juros", length = 1)
    private String tipJuros;
    @Basic(optional = false)
    @Column(name = "dat_emissao", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date datEmissao;
    @Size(max = 200)
    @Column(name = "num_os", length = 200, nullable = true)
    private String numOs;
    @JoinColumn(name = "id_cliente", referencedColumnName = "id_cliente", nullable = false)
    @ManyToOne(optional = false)
    private Cliente idCliente;
    @JoinColumn(name = "id_custo", referencedColumnName = "id_custo", nullable = false)
    @ManyToOne(optional = false)
    private CentroCusto idCusto;
    @JoinColumn(name = "id_empreendimento", referencedColumnName = "id_empreendimento")
    @ManyToOne
    private Empreendimento idEmpreendimento;
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "idEmpresa.nomEmpresa", campo = "nom_Empresa", nomeTabela = "conta_receber", nomeTabelJoin = "Empresa")
    @JoinColumn(name = "id_Empresa", referencedColumnName = "id_Empresa", nullable = false)
    @ManyToOne
    private Empresa idEmpresa;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idReceber")
    @LazyCollection(LazyCollectionOption.FALSE)
    @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private List<ContaReceberParcela> contaReceberParcelaList;

    public ContaReceber() {
    }

    public ContaReceber(Integer idReceber) {
        this.idReceber = idReceber;
    }

    public ContaReceber(Integer idReceber, String dscReceber, Date datEmissao, BigDecimal vlrReceber) {
        this.idReceber = idReceber;
        this.dscReceber = dscReceber;
        this.datEmissao = datEmissao;
        this.vlrReceber = vlrReceber;
    }

    public Integer getIdReceber() {
        return idReceber;
    }

    public void setIdReceber(Integer idReceber) {
        this.idReceber = idReceber;
    }

    public String getDscReceber() {
        return dscReceber;
    }

    public void setDscReceber(String dscReceber) {
        this.dscReceber = dscReceber;
    }

    public Date getDatEmissao() {
        return datEmissao;
    }

    public void setDatEmissao(Date datEmissao) {
        this.datEmissao = datEmissao;
    }

    public String getNumDocumento() {
        return numDocumento;
    }

    public void setNumDocumento(String numDocumento) {
        this.numDocumento = numDocumento;
    }

    public BigDecimal getVlrReceber() {
        return vlrReceber;
    }

    public void setVlrReceber(BigDecimal vlrReceber) {
        this.vlrReceber = vlrReceber;
    }

    public String getDscObs() {
        return dscObs;
    }

    public void setDscObs(String dscObs) {
        this.dscObs = dscObs;
    }

    public BigDecimal getPerJuros() {
        return perJuros;
    }

    public void setPerJuros(BigDecimal perJuros) {
        this.perJuros = perJuros;
    }

    public BigDecimal getVlrDesconto() {
        return vlrDesconto;
    }

    public void setVlrDesconto(BigDecimal vlrDesconto) {
        this.vlrDesconto = vlrDesconto;
    }

    public BigDecimal getVlrMulta() {
        return vlrMulta;
    }

    public void setVlrMulta(BigDecimal vlrMulta) {
        this.vlrMulta = vlrMulta;
    }

    public String getTipJuros() {
        return tipJuros;
    }

    public void setTipJuros(String tipJuros) {
        this.tipJuros = tipJuros;
    }

    public Cliente getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(Cliente idCliente) {
        this.idCliente = idCliente;
    }

    public CentroCusto getIdCusto() {
        return idCusto;
    }

    public void setIdCusto(CentroCusto idCusto) {
        this.idCusto = idCusto;
    }

    public List<ContaReceberParcela> getContaReceberParcelaList() {
        return contaReceberParcelaList;
    }

    public void setContaReceberParcelaList(List<ContaReceberParcela> contaReceberParcelaList) {
        this.contaReceberParcelaList = contaReceberParcelaList;
    }

    public Empreendimento getIdEmpreendimento() {
        return idEmpreendimento;
    }

    public void setIdEmpreendimento(Empreendimento idEmpreendimento) {
        this.idEmpreendimento = idEmpreendimento;
    }

    public String getNumOs() {
        return numOs;
    }

    public void setNumOs(String numOs) {
        this.numOs = numOs;
    }

    public Empresa getIdEmpresa() {
        return idEmpresa;
    }

    public void setIdEmpresa(Empresa idEmpresa) {
        this.idEmpresa = idEmpresa;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idReceber != null ? idReceber.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ContaReceber)) {
            return false;
        }
        ContaReceber other = (ContaReceber) object;
        if ((this.idReceber == null && other.idReceber != null) || (this.idReceber != null && !this.idReceber.equals(other.idReceber))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.jm.financeiro.entity.ContaReceber[ idReceber=" + idReceber + " ]";
    }
}
